﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace MvvmTreeView
{
    public class EditNode : ITreeNode
    {
        private ITreeView treeView;
        public event ImageAvailableHandler ImageAvailable;
        public object Tag { get; set; }
        public string Text { get; set; }
        public TreeViewItem TreeViewItem { get; set; }
        public int ImageIndex { get; set; }
        public event NodeLabelEditEventHandler AfterLabelEdit;
        public event NodeLabelEditEventHandler BeforeLabelEdit;

        public EditNode(ITreeView treeView, int imageIndex = 0, string text = "")
        {
            this.treeView = treeView;
            this.Tag = this;
            this.ImageIndex = imageIndex;
            this.Text = text;
        }

        public Color BackColor
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public Rectangle Bounds
        {
            get { throw new NotImplementedException(); }
        }

        public bool Checked
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public ITreeNode FirstNode
        {
            get { throw new NotImplementedException(); }
        }

        public string FullPath
        {
            get { throw new NotImplementedException(); }
        }


        public string ImageKey
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public bool IsEditing
        {
            get { throw new NotImplementedException(); }
        }

        public bool IsExpanded
        {
            get { throw new NotImplementedException(); }
        }

        public bool IsSelected
        {
            get { throw new NotImplementedException(); }
        }

        public bool IsVisible
        {
            get { throw new NotImplementedException(); }
        }

        public ITreeNode LastNode
        {
            get { throw new NotImplementedException(); }
        }

        public int Level
        {
            get { throw new NotImplementedException(); }
        }

        public string Name
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public ITreeNode NextNode
        {
            get { throw new NotImplementedException(); }
        }

        public ITreeNode NextVisibleNode
        {
            get { throw new NotImplementedException(); }
        }

        public TreeNodeCollection Nodes
        {
            get
            {
                return null;
            }
        }

        public ITreeNode Parent
        {
            get { throw new NotImplementedException(); }
        }

        public ITreeNode PrevNode
        {
            get { throw new NotImplementedException(); }
        }

        public ITreeNode PrevVisibleNode
        {
            get { throw new NotImplementedException(); }
        }

        public int SelectedImageIndex
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public string SelectedImageKey
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public int StateImageIndex
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public string StateImageKey
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public System.Windows.Media.Imaging.BitmapImage Image
        {
            get
            {
                return null;
            }
        }

        public string ToolTipText
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public ITreeView TreeView
        {
            get
            {
                return treeView;
            }
        }

        public void BeginEdit()
        {
            throw new NotImplementedException();
        }

        public object Clone()
        {
            throw new NotImplementedException();
        }

        public void Collapse()
        {
            throw new NotImplementedException();
        }

        public void Collapse(bool ignoreChildren)
        {
            throw new NotImplementedException();
        }

        public void EndEdit(bool cancel)
        {
            throw new NotImplementedException();
        }

        public void EnsureVisible()
        {
            throw new NotImplementedException();
        }

        public void Expand()
        {
            throw new NotImplementedException();
        }

        public void ExpandAll()
        {
            throw new NotImplementedException();
        }

        public int GetNodeCount(bool includeSubTrees)
        {
            throw new NotImplementedException();
        }

        public void Remove()
        {
            throw new NotImplementedException();
        }

        public void StartLoadImage()
        {
        }

        public void Toggle()
        {
            throw new NotImplementedException();
        }


        public void RemoveSpinster()
        {
            throw new NotImplementedException();
        }

        public bool ContainsSpinster
        {
            get { throw new NotImplementedException(); }
        }

        public void RemoveEditNode()
        {
            throw new NotImplementedException();
        }

        public bool ContainsEditNode
        {
            get { throw new NotImplementedException(); }
        }


        public event ImageAvailableHandler GlyphAvailable;

        public event ImageAvailableHandler LayoverImageAvailable;

        public System.Collections.Generic.List<string> AddNewShortCuts
        {
            get { throw new NotImplementedException(); }
        }

        public void AddNew(string shortCut)
        {
            throw new NotImplementedException();
        }

        public void DragStarting(object sender, UIObjects.DragDropInterfaces.ItemDragEventArgs e)
        {
            throw new NotImplementedException();
        }

        public void DragCompleted(object sender, UIObjects.DragDropInterfaces.ItemDragEventArgs e)
        {
            throw new NotImplementedException();
        }

        public void ItemDropped(object sender, UIObjects.DragDropInterfaces.ItemDragEventArgs e, int insertionIndex)
        {
            throw new NotImplementedException();
        }

        public void GiveFeedback(object sender, UIObjects.DragDropInterfaces.GiveFeedbackEventArgs e)
        {
            throw new NotImplementedException();
        }

        public void DragEnter(object sender, UIObjects.DragDropInterfaces.DragEventArgs e)
        {
            throw new NotImplementedException();
        }

        public void DragLeave(object sender, UIObjects.DragDropInterfaces.DragEventArgs e)
        {
            throw new NotImplementedException();
        }

        public void DragOver(object sender, UIObjects.DragDropInterfaces.DragEventArgs e)
        {
            throw new NotImplementedException();
        }

        public bool HasLayoverImage<T>(out T image)
        {
            throw new NotImplementedException();
        }

        object ITreeNode.BackColor
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        object ITreeNode.Bounds
        {
            get { throw new NotImplementedException(); }
        }

        public ContextMenu ContextMenu
        {
            get
            {
                return null;
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public bool IsChildrenLoaded
        {
            get { throw new NotImplementedException(); }
        }

        public void LoadChildren()
        {
        }

        public bool? HasChildren
        {
            get 
            {
                return false;
            }
        }

        public bool AllowRename
        {
            get { throw new NotImplementedException(); }
        }

        public bool AllowDrop
        {
            get 
            {
                return false;    
            }
        }

        object ITreeNode.TreeViewItem
        {
            get
            {
                return null;
            }
            set
            {
            }
        }

        public object ItemContent
        {
            get
            {
                return null;
            }
            set
            {
            }
        }

        object ITreeNode.Image
        {
            get 
            {
                return null;
            }
        }

        public object Glyph
        {
            get { throw new NotImplementedException(); }
        }

        public object LayoverImage
        {
            get { throw new NotImplementedException(); }
        }

        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

        public ITreeNode ShallowClone()
        {
            throw new NotImplementedException();
        }

        public ITreeNode DeepClone()
        {
            throw new NotImplementedException();
        }

        public bool HasChildrenQueried
        {
            get { throw new NotImplementedException(); }
            set { throw new NotImplementedException(); }
        }

        public float ChildOrdinal
        {
            get
            {
                return 0;
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public void OnSelect()
        {
        }

        public string SelectionStatus
        {
            get 
            {
                return null;
            }
        }

        public EditNode AddEditNode(int imageIndex, string text)
        {
            throw new NotImplementedException();
        }

        public void FireAfterLabelEdit(string text)
        {
            if (AfterLabelEdit != null)
            {
                AfterLabelEdit(this, new NodeLabelEditEventArgs(this, text));
            }
        }

        public void FireBeforeLabelEdit()
        {
            if (BeforeLabelEdit != null)
            {
                BeforeLabelEdit(this, new NodeLabelEditEventArgs(this));
            }
        }


        public event EventHandler DblClick;

        public void OnDblClick(object sender, EventArgs e)
        {
            throw new NotImplementedException();
        }

        public INodeExpander NodeExpander
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }
    }
}
